package com.funong.matrix.biz.power.facade;

import cn.hutool.core.lang.tree.Tree;
import com.funong.matrix.biz.base.entity.SysMenuEntity;
import com.funong.matrix.biz.power.pojo.dto.SysRolePermissionDTO;
import com.funong.matrix.core.dto.QueryDTO;
import com.funong.matrix.core.dto.Result;

import java.util.List;

/**
 * @author : NaNa
 * @since : 2023-05-19 17:00
 **/
public interface SysMenuFacade {
    /**
     * 列表查询菜单信息
     *
     * @param queryDTO
     * @return
     */
    Result queryByCondition(QueryDTO<SysMenuEntity> queryDTO);

    /**
     * 新增或更新菜单信息
     *
     * @param menuEntity
     * @return
     */
    Boolean saveOrUpdateMenu(SysMenuEntity menuEntity);

    /**
     * 根据ID获取菜单信息
     *
     * @param menuId
     * @return
     */
    SysMenuEntity getMenuById(Integer menuId);

    /**
     * 根据编码获取菜单信息
     *
     * @param code
     * @return
     */
    SysMenuEntity getMenuByCode(String code);

    /**
     * 根据角色编码获取菜单信息
     *
     * @param roleCodeList
     * @return
     */
    List<SysMenuEntity> getMenuListByRoleCodeList(List<String> roleCodeList);

    /**
     * 更新菜单状态
     *
     * @param menuId
     * @param status
     * @return
     */
    Boolean updateMenuStatus(Integer menuId, Integer status);

    /**
     * 删除菜单
     *
     * @param menuId
     * @return
     */
    Boolean deleteMenu(Integer menuId);

    /**
     * 角色绑定菜单
     *
     * @param rolePermissionDTO
     */
    void saveRoleMenu(SysRolePermissionDTO rolePermissionDTO);

    /**
     * 根据系统查询菜单树
     *
     * @param systemId 系统{@link com.funong.matrix.core.enums.SystemIdEnum}
     * @return 菜单树
     */
    List<SysMenuEntity> getMenuTree(Integer systemId);

    /**
     * 下拉选择
     *
     * @param systemId
     * @return
     */
    List<Tree<String>> querySelect(Integer systemId);
}
